package tcu.iot.gasmanage.common.utils;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import tcu.iot.gasmanage.entity.datamanagement.UpdateRealTimeData;
import tcu.iot.gasmanage.entity.equipment.EquipmentData;
import tcu.iot.gasmanage.entity.equipment.EquipmentInfoResult;
import tcu.iot.gasmanage.entity.export.TDActionData;

import java.util.ArrayList;
import java.util.List;

public class JSONUtils {
    /*物联网返回数据，解析数据工具类*/

    //获取所有数据
    public static List<EquipmentInfoResult> parseEquipmentData(String txt) {

        //调用Http工具类，发送Post请求，JSONObject接收
        JSONObject JSONObject = HttpUtils.sendPostRequest(txt);
        //获取其中的data，为jsonArray
        JSONArray JSONArray = JSONObject.getJSONArray("data");
        List<EquipmentInfoResult> list = new ArrayList<>();

        for (int i = 0; i < JSONArray.size(); i++) {
            //通过遍历将每一个数据提取
            JSONArray jsonArray = JSONArray.getJSONArray(i);

            EquipmentInfoResult equipmentInfoResult = new EquipmentInfoResult(jsonArray.getString(0), jsonArray.getDouble(1),
                    jsonArray.getDouble(2), jsonArray.getDouble(3), jsonArray.getDouble(4), jsonArray.getFloat(5));

            list.add(equipmentInfoResult);
        }

        return list;
    }

    //只获取最新数据
    public static EquipmentData parseEquipmentDataLimit1(String id, String txt) {
        JSONObject JSONObject = HttpUtils.sendPostRequest(txt);

        JSONArray JSONArray = JSONObject.getJSONArray("data");
        JSONArray jsonArray = JSONArray.getJSONArray(0);

        jsonArray.add(0);
        jsonArray.add(id);

        return new EquipmentData(jsonArray.getString(0), jsonArray.getDouble(1)
                , jsonArray.getDouble(2), jsonArray.getDouble(3), jsonArray.getDouble(4), jsonArray.getFloat(5), jsonArray.getFloat(6), jsonArray.getString(7));
    }

    //包含信号强度的设备，只获取第一条数据
    public static EquipmentData WithSignalparseEquipmentDataLimit1(String id, String txt) {
        JSONObject JSONObject = HttpUtils.sendPostRequest(txt);

        JSONArray JSONArray = JSONObject.getJSONArray("data");
        JSONArray jsonArray = JSONArray.getJSONArray(0);

        jsonArray.add(id);

        return new EquipmentData(jsonArray.getString(0), jsonArray.getDouble(1)
                , jsonArray.getDouble(2), jsonArray.getDouble(3), jsonArray.getDouble(4), jsonArray.getFloat(5), jsonArray.getFloat(6), jsonArray.getString(7));
    }

    //获取数据量总数，返回int为数据总数
    public static int getTotal(String txt) {
        JSONObject JSONObject = HttpUtils.sendPostRequest(txt);
        JSONArray JSONArray = JSONObject.getJSONArray("data");

        if (JSONArray.size() == 0)
            return 0;
        else {
            JSONArray jsonArray = JSONArray.getJSONArray(0);
            return jsonArray.getIntValue(0);
        }
    }

    public static List<String> getAllTables(String txt) {
        JSONObject JSONObject = HttpUtils.sendPostRequest(txt);
        JSONArray JSONArray = JSONObject.getJSONArray("data");
        List<String> list = new ArrayList<>();

        for (int i = 0; i < JSONArray.size(); i++) {
            JSONArray jsonArray = JSONArray.getJSONArray(i);
            list.add(jsonArray.getString(0));
        }

        return list;
    }

    public static TDActionData getExportData(String txt, String equipmentNumber) {
        JSONObject JSONObject = HttpUtils.sendPostRequest(txt);

        JSONArray JSONArray = JSONObject.getJSONArray("data");

        JSONArray jsonArray = JSONArray.getJSONArray(0);

        return new TDActionData(jsonArray.getString(0), jsonArray.getFloat(1), jsonArray.getFloat(2), jsonArray.getFloat(3), jsonArray.getFloat(4), equipmentNumber);
    }

    public static List<UpdateRealTimeData> UpdateRealTimeData(String txt){
        List<UpdateRealTimeData> updateRealTimeDataList = new ArrayList<>();

        JSONObject JSONObject = HttpUtils.sendPostRequest(txt);

        JSONArray JSONArray = JSONObject.getJSONArray("data");

        for(int i=0;i<JSONArray.size();i++){
            JSONArray jsonArray = JSONArray.getJSONArray(i);

            UpdateRealTimeData updateRealTimeData = new UpdateRealTimeData(jsonArray.getString(0), jsonArray.getFloat(1));

            updateRealTimeDataList.add(updateRealTimeData);
        }

        return updateRealTimeDataList;
    }
}
